package com.rongke.web.ContextListener;



import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * Created by bilibili on 2017/10/30.
 */


public class MyTimerTask3 {

    // newScheduledThreadPool(int corePoolSize),corePoolSize是线程池的大小，
    //即保持活动或者闲置的线程，它们是任务调度时用于并发执行的线程
    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    ScheduledFuture<?> taskHandle;
    private static boolean isRun = false;
    /**
     * 启动任务
     */
    public void taskBegin() {
        // 定义一个任务
        final Runnable task = new Runnable() {
            public void run() {
                System.out.println("开始执行");
                if(isRun){
                    System.out.println("前一次未执行完,跳过本次任务。。。");
                    return;
                }
                isRun=true;
                System.out.println("执行任务");

                    isRun=false;
            }
        };

        // scheduleAtFixedRate(Runnable command, long initialDelay, long period,
        // TimeUnit unit):
        // 通过ScheduledExecutorService的scheduleAtFixedRate来执行任务
        // 参数
        // command - 要执行的任务
        // initialDelay - 首次执行的延迟时间
        // period - 连续执行之间的周期
        // unit - initialDelay 和 period 参数的时间单位
        System.out.println("任务启动………………………………");

        taskHandle = scheduler.scheduleAtFixedRate(task, 1, 1, TimeUnit.MINUTES);
    }

    /**
     * 结束任务
     */
    public void taskEnd() {
        scheduler.shutdown();   //启动一次顺序关闭，执行以前提交的任务，但不接受新任务。如果已经关闭，则调用没有其他作用。
//      List<Runnable> shutdownNow()试图停止所有正在执行的活动任务，暂停处理正在等待的任务，并返回等待执行的任务列表。
    }


}
